//      PythonAddin.h
//      
//      Copyright 2011 Alexander Lebedinsky <pr0f.a7ex@gmail.com>
//      
//      Redistribution and use in source and binary forms, with or without
//      modification, are permitted provided that the following conditions are
//      met:
//      
//      * Redistributions of source code must retain the above copyright
//        notice, this list of conditions and the following disclaimer.
//      * Redistributions in binary form must reproduce the above
//        copyright notice, this list of conditions and the following disclaimer
//        in the documentation and/or other materials provided with the
//        distribution.
//      * Neither the name of the  nor the names of its
//        contributors may be used to endorse or promote products derived from
//        this software without specific prior written permission.
//      
//      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


#ifndef __PYTONADDIN_H__
#define __PYTONADDIN_H__

#include <Python.h>

#include <wchar.h>
#include <string>

#include "ComponentBase.h"
/* #include "AddInDefBase.h" */
#include "IMemoryManager.h"

#ifdef __cplusplus
extern "C" {
#endif
extern struct _dyn_loadable *PyImport_DynModules;
#ifdef __cplusplus
}
#endif

PyObject*
getPythonErrorDescr();

uint32_t
pyStrToWchar(wchar_t** Dest, PyObject* Source, uint32_t len = 0);

uint32_t
pyStrToShortWchar(WCHAR_T** Dest, PyObject* Source, uint32_t len = 0);

uint32_t
pyUniToShortWchar(WCHAR_T** Dest, PyObject* Source, uint32_t len = 0);

int
importDynamic(const char *modName, const char *fileName);

wchar_t*
importDynModules(void);

uint32_t
convPyStrToTV_STR(tVariant* Dest, const PyObject* pyStrSource, IMemoryManager *m_iMemory);

uint32_t
convPyStrToTV_WSTR(tVariant* Dest, const PyObject* pyStrSource, IMemoryManager *m_iMemory);

void
convPyIntToTV_I4(tVariant* pDest, const PyObject* pySource);

#endif //__PYTONADDIN_H__
